// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Copyright (c) 2012 The cwkshell Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef   CUC_CWKSHELL_BROWSER_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_
#define   CUC_CWKSHELL_BROWSER_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_

#include "base/compiler_specific.h"
#include "base/memory/ref_counted.h"
#include "content/public/browser/download_manager_delegate.h"

namespace content {

	class DownloadManager;
	class DownloadManagerDelegate;
}
namespace cuc{
	namespace shell{

		class ShellDownloadManagerDelegate
			: public content::DownloadManagerDelegate,
			public base::RefCountedThreadSafe<ShellDownloadManagerDelegate> {
		public:
			ShellDownloadManagerDelegate();

			void SetDownloadManager(content::DownloadManager* manager);

			virtual void Shutdown() OVERRIDE;
			virtual bool DetermineDownloadTarget(
				content::DownloadItem* download,
				const content::DownloadTargetCallback& callback) OVERRIDE;
			virtual bool ShouldOpenDownload(
				content::DownloadItem* item,
				const content::DownloadOpenDelayedCallback& callback) OVERRIDE;

			// Inhibits prompting and sets the default download path.
			void SetDownloadBehaviorForTesting(
				const base::FilePath& default_download_path);

		protected:
			// To allow subclasses for testing.
			virtual ~ShellDownloadManagerDelegate();

		private:
			friend class base::RefCountedThreadSafe<ShellDownloadManagerDelegate>;


			void GenerateFilename(int32 download_id,
				const content::DownloadTargetCallback& callback,
				const base::FilePath& generated_name,
				const base::FilePath& suggested_directory);
			void OnDownloadPathGenerated(int32 download_id,
				const content::DownloadTargetCallback& callback,
				const base::FilePath& suggested_path);
			void ChooseDownloadPath(int32 download_id,
				const content::DownloadTargetCallback& callback,
				const base::FilePath& suggested_path);

			content::DownloadManager* download_manager_;
			base::FilePath default_download_path_;
			bool suppress_prompting_;

			DISALLOW_COPY_AND_ASSIGN(ShellDownloadManagerDelegate);
		};
	}// namespace shell 
}  // namespace cuc

#endif  //   CUC_CWKSHELL_BROWSER_SHELL_DOWNLOAD_MANAGER_DELEGATE_H_
